package demo1221.am;

/*
Object类中的hashCode方法,该方法返回的是对象的逻辑地址值.
物理地址:在内存创建对象的实际地址.
逻辑地址:根据对象创建对象在内存中的实际地址模拟出来的逻辑地址.

在java中,如果两个对象的类型相同,且属性值也完全相同,就认为是同一个对象.
两个相同类型对象的内容属性值相同,hash值(逻辑地址值)就是一样的.
hash值相同,不一定是同一个对象.(哈希冲突)

hash值不同,一定的是不同的对象.
java中判断两个对象是否真正的相等(属性值相同),只能通过equals方法进行比较.
java中可以通过hash值判断两个对象不相等.
 */
public class Demo_03 {
    public static void main(String[] args) {
        String s = "重地";
        String s1 = "通话";
        System.out.println(s.hashCode());//1179395
        System.out.println(s1.hashCode());//1179395
        demo01();
    }

    public static void demo01() {
        Student s1 = new Student(101, "tom");
        Student s2 = new Student(101, "tom");
        System.out.println(s1.hashCode());//119118
        System.out.println(s2.hashCode());//119118
        //逻辑地址是相同的
        System.out.println(s1.hashCode() == s2.hashCode());//哈希判断，类型相同属性值相同得出哈希值相同，是同一个对象
//        物理地址,false
        System.out.println(s1 == s2);//物理地址判断，地址不同，不是同一个对象，返回false
    }
}
